var rqId = 1;

/**
 * @function makeJSONRequest 
 * @param {String} method - Nazwa procedury
 * @param {Object} data - Parametry procedury
 * @param {Function} callback - Funkcja wywołana po odebraniu odpowiedzi 
 * 
 * Funkcja wysyłająca żądanie wywołania procedury przez skrypt php
 * i wywołująca funkcję przekazaną w zmiennej callback po odebraniu odpowiedzi
 */
makeJSONRequest = function(method, data, callback) {
	obj = {"jsonrpc":"2.0", "method":method, "params":data, "id":rqId++};
	$.getJSON(
		'main.php',
		{'req':JSON.stringify(obj)},
		callback
	);
} 

/**
 * @function processLoginResponse 
 * @param {Object} data - Odpowiedź od skryptu PHP 
 * 
 * Funkcja sprawdzająca odpowiedź na próbę logowania
 */
processLoginResponse = function(data) {
	mailboxes = eval(data);
	if(mailboxes.error !== undefined) { //złe hasło
		$('.login_form').append('<br /><h3 style="color: red;">'+mailboxes.error+'</h3>');
	} else {
		$('#pre_login_main_screen').remove();
		$('#loginpopup').fadeOut(500);
		$('#bkgmask').fadeOut(500, function(){
			$('#bkgmask').remove();
		});
		$('#post_login_main_screen').css({"display":"block"});
		for(var mbx in data.result.info) {
			$('#mailboxList').append(
				'<li class="mbx" name="'+mbx+'">'+mbx+' ('+
					data.result.info[mbx].RECENT+'/'+
					data.result.info[mbx].EXISTS+')</li>'
			);
		}		
		var name = $('#username').val();
		var pass = $('#password').val();
		makeJSONRequest('listMailboxMessages', {"user":name, "pass":pass, "mailbox":"INBOX"}, processMailboxMessages);	
	}
}

/**
 * @function processMailboxMessages 
 * @param {Object} data - Odpowiedź od skryptu PHP
 * 
 * Funkcja tworząca listę maili z wybranej skrzynki
 */
processMailboxMessages = function(data) {
	mails = eval(data);
	if(mails.error !== undefined) { //błąd
		$('#post_login_main_screen').append('<br/><h3 style="color:red;">'+mails.error+'</h3>');
	} else {
		alert(data.result.msgs[0].header.from);
		maillist = data.result.msgs;
		for(var mail=0; mail<maillist.length; mail++) {
			$('#mailList').append(
				'<tr><td>x</td><td>'+
				maillist[mail].header.from+'</td><td>'+
				maillist[mail].header.subject+'</td><td>'+
				maillist[mail].header.date+'</td></tr>'
			);
		}
	}
}

$(document).ready(function() {
	
	$('#showLoginDialogButton').click(function() {
		var loginBox = $('#loginpopup');
		
		loginBox.fadeIn(500);
		
		loginBox.css({
			'margin-top' : -1*(loginBox.height()+20)/2,
			'margin-left' : -1*(loginBox.width()+20)/2
		});
		
		$('body').append('<div id="bkgmask"></div>');
		$('#bkgmask').fadeIn(500);
		$('#username').val('');
		$('#password').val('');
	});
	
	$('#closebutton').click(function() {
		$('#loginpopup').fadeOut(500);
		$('#bkgmask').fadeOut(500, function(){
			$('#bkgmask').remove();
		});
		
	})
	
	$('#loginFormSubmitButton').click(function() {
		var name = $('#username').val();
		var pass = $('#password').val();
		var regex = new RegExp(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/);
		if(!regex.test(name)) {
			$('#username').css({'color':'red'});
		} else {	
			makeJSONRequest('listMailboxes', {"user":name, "pass":pass}, processLoginResponse)			
		}
	})
});
